package com.warom.sdg.webview.jsinterface;

import android.content.Context;
import android.util.Log;

import com.warom.sdg.enums.ModuleType;
import com.warom.sdg.model.ApiResponse;
import com.warom.sdg.model.PlcDataEntity;
import com.warom.sdg.model.PestDetectionEntity;
import com.warom.sdg.util.LogUtils;
import com.warom.sdg.webview.BaseWebViewJsInterface;
import com.warom.sdg.webview.WebViewWrapper;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;

/**
 * WebView JavaScript接口 - 虫情检测
 * 处理虫情检测数据相关的JavaScript调用
 */
public class WebViewJsPestDetectionInterface extends BaseWebViewJsInterface {

    /**
     * 构造函数
     * 
     * @param context        上下文
     * @param webViewWrapper WebView包装类，用于回调
     */
    public WebViewJsPestDetectionInterface(Context context, WebViewWrapper webViewWrapper) {
        super(context, webViewWrapper);
    }

    /**
     * 获取虫情检测历史数据
     * 
     * @param args      参数（必须指定设备ID、开始时间、结束时间）
     * @param requestId 请求ID
     */
    public void getPestDetectionHistory(String args, String requestId) {
        executor.execute(() -> getPestDetectionHistoryAsync(args, result -> handleAsyncResponse(requestId, result)));
    }

    /**
     * 获取虫情检测历史数据 (异步版本，用于内部实现)
     * 
     * @param argsJson 参数，必须包含：
     *                 deviceId - 设备ID
     *                 startTime - 开始时间戳
     *                 endTime - 结束时间戳
     *                 limit - 可选，限制返回记录数，默认1000
     * @param callback 回调函数，接收历史数据的JSON字符串
     */
    private void getPestDetectionHistoryAsync(String argsJson, Consumer<String> callback) {
        try {
            LogUtils.logOperation("虫情检测", "查询历史", "开始获取虫情检测历史数据");

            // 解析参数
            Map<String, Object> args = gson.fromJson(argsJson, Map.class);

            // 验证必要参数
            if (!args.containsKey("deviceId") || !args.containsKey("startTime") || !args.containsKey("endTime")) {
                String errorMsg = "缺少必要参数，需要指定设备ID、开始时间和结束时间";
                LogUtils.logError("虫情检测", "查询历史", new IllegalArgumentException(errorMsg));
                callback.accept(ApiResponse.error(errorMsg).toJson());
                return;
            }

            // 提取参数
            int deviceId = ((Double) args.get("deviceId")).intValue();
            long startTime = ((Double) args.get("startTime")).longValue();
            long endTime = ((Double) args.get("endTime")).longValue();
            int limit = args.containsKey("limit") ? ((Double) args.get("limit")).intValue() : 1000;

            // TODO: 查询数据库获取历史数据
            // 由于实际数据库查询功能还未实现，这里先生成模拟数据
            List<Map<String, Object>> mockData = generateMockPestDetectionData(deviceId, startTime, endTime, limit);
            
            // 转换为JSON
            String jsonResult = gson.toJson(ApiResponse.success(mockData));
            LogUtils.logOperation("虫情检测", "查询历史结果", "获取到 " + mockData.size() + " 条历史记录");

            // 返回结果
            callback.accept(jsonResult);

        } catch (Exception e) {
            Log.e(TAG, "获取虫情检测历史数据失败", e);
            LogUtils.logError("虫情检测", "获取虫情检测历史数据失败", e);

            // 使用标准响应格式
            callback.accept(ApiResponse.error("处理异常: " + e.getMessage()).toJson());
        }
    }

    /**
     * 生成模拟虫情检测数据
     * 
     * @param deviceId  设备ID
     * @param startTime 开始时间戳
     * @param endTime   结束时间戳
     * @param limit     限制返回记录数
     * @return 模拟数据列表
     */
    private List<Map<String, Object>> generateMockPestDetectionData(int deviceId, long startTime, long endTime, int limit) {
        List<Map<String, Object>> result = new ArrayList<>();
        
        // 计算时间间隔，以便生成多条记录
        long timeInterval = (endTime - startTime) / Math.min(10, limit);
        String[] pestTypes = {"玉米象虫", "米象", "谷蛾", "麦蛾"};
        
        // 生成多条记录
        for (int i = 0; i < Math.min(10, limit); i++) {
            Map<String, Object> item = new HashMap<>();
            
            long timestamp = startTime + i * timeInterval;
            
            // 基本信息
            item.put("deviceId", deviceId);
            item.put("timestamp", timestamp);
            
            // 格式化时间
            java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            item.put("timeString", sdf.format(new java.util.Date(timestamp)));
            
            // 随机生成检测数据
            item.put("pestType", pestTypes[(int)(Math.random() * pestTypes.length)]);
            item.put("confidence", Math.round(Math.random() * 100) / 100.0);
            item.put("count", (int)(Math.random() * 10) + 1);
            item.put("imageUrl", "pest_detection_" + timestamp + ".jpg");
            item.put("status", Math.random() > 0.7 ? "危险" : Math.random() > 0.4 ? "警告" : "正常");
            
            result.add(item);
        }
        
        return result;
    }

    // TODO: 实现其他虫情检测相关的方法
    // - 获取实时虫情数据
    // - 获取虫情统计数据
    // - 上传新的虫情检测图片
} 